// 专门处理权限路由的模块
import { constantRoutes, asyncRoutes } from '@/router' // 静态路由 和动态路由

const state = {
  // 一开始 肯定拥有静态路由的权限
  routes: [] // 路由表 表示当前用户拥有的所有的路由的数组
}
const mutations = {
  // 定义修改routes的mutations
  // payload 认为是登陆成功需要添加的新路由
  setRoutes (state, newRoutes) {
    // state.routes = [...state.routes, ...newRoutes] // 不能这样写 业务不正确
    state.routes = [...constantRoutes, ...newRoutes] // 每次都是在静态路由的基础上加新的路由
  }
}
const actions = {
  // 筛选权限路由
  // 第二个参数为当前用户的所拥有的才菜单权限 munus:["settings",'permissions']
  filterRoutes (context, menus) {
    const routes = []
    // 筛选出 动态里也有中和menus中能够对应上的路由
    menus.forEach(key => {
      // asyncRoutes 中找有没有对象中的name属性等于item的 如果找不到就是没有权限 找到了需要筛选出来
      // asyncRoutes.filter(item => item.name === key) //得到一个数组 有可能有元素 有可能没有
      routes.push(...asyncRoutes.filter(item => item.name === key))
    })
    // 得到的routes是所有的模块中满足权限要求的路由数组 同时也是当前用户所拥有的路由权限
    context.commit('setRoutes', routes) // 将动态路由提交给mutations 进行修改state数据 state是用来显示左侧菜单用的
    return routes // return是给路由addRoutes用的
  }
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}
